Here we look at the “inner speech” scale (Hardy/Bentall; Packet 2) in detail.

Differences across fieldsites

Mean scores by site

First, let’s look at scores for participants in each site:

Note that this plot includes both average scores for each site (in black), and individual scores for all of the participants in that site (small, colorful points in the background, which are “jittered” around a little so that you can see them all).

Well, this is a little sobering: It looks like the participants in different samples within the same site varied about as much as participants did across sites. This is particularly striking in GH and VT, where we also have other reasons for concern about how people might have been using these scales differently…

Now let’s look at these differences in more detail using the “raw data” for individual questions, rather than these subscale scores.

Responses by question, by site

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vectorIgnoring unknown aesthetics: fill

I have not yet looked at this in detail.

Distribution of responses for individual participants, by site

Another thing we might be interested in is how individual participants responded: Were there people who said yes to everything, or no to everything? How do these distributions of responses differ across participants in different sites?

Let’s take a look:

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

I have not yet looked at this in detail.

Just for fun, here’s another way to look at the same data, overlaying the density distributions for each site on top of each other to see where they seem to be similar/different:

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

LS0tCnRpdGxlOiAnR3JhcHBsaW5nIHdpdGggdGhlICJJbm5lciBzcGVlY2giIHNjYWxlJwpzdWJ0aXRsZTogJ0xhc3QgdXBkYXRlZCAyMDE4LTA0LTA3JwpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCgpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGQUxTRX0KIyBzZXQgd29ya2luZyBkaXJlY3RvcgojIHNldHdkKCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RBVEEgV1JBTkdMSU5HL3RlbXBsZXRvbl9wYWNrZXRzL3BhY2tldHMxMjMvIikKCiMgbG9hZCBwYWNrYWdlcwpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShybXMpCmxpYnJhcnkoZ2dkZW5kcm8pCmxpYnJhcnkocHN5Y2gpCgojIGxvYWQgcXVlc3Rpb24ga2V5IChpbmNsdWRpbmcgbWFudWFsIHJldmVyc2UtY29kaW5nKQpxdWVzdGlvbl9rZXkgPC0gcmVhZC5jc3YoIi8vVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RBVEEgV1JBTkdMSU5HL3RlbXBsZXRvbl9wYWNrZXRzL3BhY2tldHMxMjMvcGFja2V0czEyM19xdWVzdGlvbl9rZXlfYnloYW5kLmNzdiIpCgojIGxvYWQgZGF0YSAocmV2ZXJzZS1jb2RlZCkKZF9sb25nIDwtIHJlYWRfY3N2KCIvL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL1RlbXBsZXRvbiBHcmFudC9EQVRBIFdSQU5HTElORy90ZW1wbGV0b25fcGFja2V0cy9wYWNrZXRzMTIzL3BhY2tldHMxMjNfZGF0YV9ieXF1ZXN0aW9uX2xvbmcuY3N2IikgJT4lCiAgbXV0YXRlKGN0cnkgPSBmYWN0b3IoY3RyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAiY2hpbmEiLCAidmFudWF0dSIpKSkKZF9sb25nX3N1YnNjYWxlIDwtIHJlYWRfY3N2KCIvL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL1RlbXBsZXRvbiBHcmFudC9EQVRBIFdSQU5HTElORy90ZW1wbGV0b25fcGFja2V0cy9wYWNrZXRzMTIzL3BhY2tldHMxMjNfZGF0YV9ieXN1YnNjYWxlX2xvbmcuY3N2IikgJT4lCiAgbXV0YXRlKGN0cnkgPSBmYWN0b3IoY3RyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAiY2hpbmEiLCAidmFudWF0dSIpKSkKCiMgbG9hZCBkYXRhIChiZWZvcmUgcmV2ZXJzZS1jb2RpbmcpCmRfYWxsIDwtIHJlYWQuY3N2KCIvL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL1RlbXBsZXRvbiBHcmFudC9EQVRBIFdSQU5HTElORy90ZW1wbGV0b25fcGFja2V0cy9wYWNrZXRzMTIzL3BhY2tldHMxMjNfZGF0YS5jc3YiKQoKIyBtYWtlIGN1c3RvbSBmdW5jdGlvbnMKcm91bmQyIDwtIGZ1bmN0aW9uKHgpIHtmb3JtYXQocm91bmQoeCwgMiksIGRpZ2l0cyA9IDIpfQpgYGAKCkhlcmUgd2UgbG9vayBhdCB0aGUgImlubmVyIHNwZWVjaCIgc2NhbGUgKEhhcmR5L0JlbnRhbGw7IFBhY2tldCAyKSBpbiBkZXRhaWwuCgojIERpZmZlcmVuY2VzIGFjcm9zcyBmaWVsZHNpdGVzCgojIyBNZWFuIHNjb3JlcyBieSBzaXRlCgpGaXJzdCwgbGV0J3MgbG9vayBhdCBzY29yZXMgZm9yIHBhcnRpY2lwYW50cyBpbiBlYWNoIHNpdGU6CgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfbG9uZ19zdWJzY2FsZV9ib290IDwtIGRfbG9uZ19zdWJzY2FsZSAlPiUKICBmaWx0ZXIoIWlzLm5hKHN1bV9zY29yZSkpICU+JQogIGdyb3VwX2J5KGN0cnksIHBhY2tldCwgc3Vic2NhbGUpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHN1bV9zY29yZSkpKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGZpbHRlcihzdWJzY2FsZSAhPSAiYXR0biIpICU+JQogIGxlZnRfam9pbihkX2xvbmdfc3Vic2NhbGUgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKCFpcy5uYShzdW1fc2NvcmUpKSAlPiUKICAgICAgICAgICAgICBjb3VudChjdHJ5LCBwYWNrZXQsIHN1YnNjYWxlKSkgJT4lCiAgbXV0YXRlKHBhY2tldCA9IHBhc3RlKCJwYWNrZXQiLCBwYWNrZXQpLAogICAgICAgICBjdHJ5ID0gZmFjdG9yKGN0cnksCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGFpbGFuZCIsICJjaGluYSIsICJ2YW51YXR1IikpLAogICAgICAgICBzdWJzY2FsZSA9IAogICAgICAgICAgIGZhY3RvcihzdWJzY2FsZSwKICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiZXh3bCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHdsX2V4dHJhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlXzAxdG8xNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2VfMTV0bzE2IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwZXYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuX3NlbnNvcnlfc2Vla2luZyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5fYm9keV9hd2FyZW5lc3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuX3RyYWl0X21ldGFtb29kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVyMl9oYWxsdWNpbmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52b19WSVNRX2RpYWxvZ2ljX3NwZWVjaCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZvX1ZJU1FfaW5uZXJfc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52b19WSVNRX2V2YWxfbW90aXZfaW5uZXJfc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52b19oYXJkeV9iZW50YWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVyX3Bvc2V5X2xvc2NoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5jb19sZXdpY2tpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YV92YW5fZWxrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X2NvbmZpZGVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfcG9zaXRpdmVfYmVsaWVmcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9jb2duaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfdW5jb250cm9sbGFiaWxpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfbmVlZF9jb250cm9sIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlud19tZW50YWxfc3RhdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlud19saWZlX2V2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbndfaW5hbmltYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlud19zZWx2ZXNfc291bHNfd29ybGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW53X2VwaXN0ZW1pYyIpLAogICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJhYnNvcnB0aW9uICh0ZWxsZWdlbikiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzb3JwdGlvbiAoZXh0cmEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICgjMS0xNCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKCMxNS0xNikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGlyaXR1YWwgZXZlbnRzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbnNvcnkgc2Vla2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJvZHkgYXdhcmVuZXNzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0dGVudGlvbiB0byBmZWVsaW5ncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhbGx1Y2luYXRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklTUTogZGlhbG9naWMgc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklTUTogaW5uZXIgc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklTUTogZXZhbHVhdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlubmVyIHNwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYXJpbmcgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5jb2Rpbmcgc3R5bGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW5kIG1ldGFwaG9ycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFjb2cuOiBsYWNrIG9mIGNvZ25pdGl2ZSBjb25maWRlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YWNvZy46IHBvc2l0aXZlIGJlbGllZnMgcmU6IHdvcnJ5aW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YWNvZy46IGNvZ25pdGl2ZSBzZWxmLWNvbnNjaW91c25lc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXRhY29nLjogdW5jb250cm9sbGFiaWxpdHkvZGFuZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YWNvZy46IG5lZWQgdG8gY29udHJvbCB0aG91Z2h0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IG1lbnRhbCBzdGF0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBsaWZlIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IGluYW5pbWF0ZSBjb25zY2lvdXNuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVhbGlzbTogbWluZHMsIHNlbHZlcywgJiB3b3JsZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IGVwaXN0ZW1vbG9neSIpKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOX0KZ2dwbG90KGRfbG9uZ19zdWJzY2FsZV9ib290ICU+JQogICAgICAgICBmaWx0ZXIoc3Vic2NhbGUgPT0gImlubmVyIHNwZWVjaCIpLAogICAgICAgYWVzKHggPSBpbnRlcmFjdGlvbihwYXN0ZTAoInBhY2tldCAiLCBnc3ViKCJwYWNrZXQgIiwgIiIsIHBhY2tldCkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RyeSwgc2VwID0gIjogIiksIAogICAgICAgICAgIHkgPSBNZWFuKSkgKwogICMgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdCA9IDApLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICAjIGdlb21faGxpbmUoYWVzKHlpbnRlcmNlcHQgPSAzNiksIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogICMgZmFjZXRfZ3JpZChnc3ViKCJwYWNrZXQgIiwgIiIsIHBhY2tldCkgfiAuKSArCiAgZ2VvbV9wb2ludChkYXRhID0gZF9sb25nX3N1YnNjYWxlICU+JQogICAgICAgICAgICAgICBmaWx0ZXIoc3Vic2NhbGUgPT0gImludm9faGFyZHlfYmVudGFsbCIsCiAgICAgICAgICAgICAgICAgICAgICAhaXMubmEoc3VtX3Njb3JlKSksCiAgICAgICAgICAgICBhZXMoeSA9IHN1bV9zY29yZSwgY29sb3IgPSBjdHJ5KSwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKHdpZHRoID0gMC4zLCBoZWlnaHQgPSAwKSwKICAgICAgICAgICAgIGFscGhhID0gMC4zLCBzaXplID0gMSkgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IExvd2VyLCB5bWF4ID0gVXBwZXIpKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMCgiKG49IiwgbiwgIikiKSwgeSA9IExvd2VyKSwgCiAgICAgICAgICAgIHNpemUgPSAyLCBudWRnZV94ID0gMC4xNSwgaGp1c3QgPSAwKSArCiAgIyBzY2FsZV94X2Rpc2NyZXRlKGV4cGFuZCA9IGMoMCwgMSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygtMjAuNSwgMjAuNSksIGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDEwKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gaW5uZXIgc3BlZWNoIHNjb3JlcyBieSBzaXRlIChIYXJkeS9CZW50YWxsKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJBIGhpZ2hlciBzY29yZSBpbmRpY2F0ZXMgbW9yZSBlbmRvcnNlbWVudHMgb2YgJ2lubmVyIHNwZWVjaCcgZXZlbnRzIChyYW5nZTogLTIwIHRvIDIwKVxuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlNpdGUiLCBjb2xvciA9ICJTaXRlIiwKICAgICAgIHkgPSAiTWVhbiBzY29yZSIpCmBgYAoKTm90ZSB0aGF0IHRoaXMgcGxvdCBpbmNsdWRlcyBib3RoIGF2ZXJhZ2Ugc2NvcmVzIGZvciBlYWNoIHNpdGUgKGluIGJsYWNrKSwgYW5kIGluZGl2aWR1YWwgc2NvcmVzIGZvciBhbGwgb2YgdGhlIHBhcnRpY2lwYW50cyBpbiB0aGF0IHNpdGUgKHNtYWxsLCBjb2xvcmZ1bCBwb2ludHMgaW4gdGhlIGJhY2tncm91bmQsIHdoaWNoIGFyZSAiaml0dGVyZWQiIGFyb3VuZCBhIGxpdHRsZSBzbyB0aGF0IHlvdSBjYW4gc2VlIHRoZW0gYWxsKS4KCldlbGwsIHRoaXMgaXMgYSBsaXR0bGUgc29iZXJpbmc6IEl0IGxvb2tzIGxpa2UgdGhlIHBhcnRpY2lwYW50cyBpbiBkaWZmZXJlbnQgc2FtcGxlcyB3aXRoaW4gdGhlIHNhbWUgc2l0ZSB2YXJpZWQgYWJvdXQgYXMgbXVjaCBhcyBwYXJ0aWNpcGFudHMgZGlkIGFjcm9zcyBzaXRlcy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgc3RyaWtpbmcgaW4gR0ggYW5kIFZULCB3aGVyZSB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVhc29ucyBmb3IgY29uY2VybiBhYm91dCBob3cgcGVvcGxlIG1pZ2h0IGhhdmUgYmVlbiB1c2luZyB0aGVzZSBzY2FsZXMgZGlmZmVyZW50bHkuLi4gCgpOb3cgbGV0J3MgbG9vayBhdCB0aGVzZSBkaWZmZXJlbmNlcyBpbiBtb3JlIGRldGFpbCB1c2luZyB0aGUgInJhdyBkYXRhIiBmb3IgaW5kaXZpZHVhbCBxdWVzdGlvbnMsIHJhdGhlciB0aGFuIHRoZXNlIHN1YnNjYWxlIHNjb3Jlcy4KCiMjIFJlc3BvbnNlcyBieSBxdWVzdGlvbiwgYnkgc2l0ZQoKYGBge3IsIGZpZy53aWR0aCA9IDEwLCBmaWcuYXNwID0gMX0KZF9wbG90IDwtIGRfbG9uZyAlPiUKICBmaWx0ZXIocXVlc3Rpb24gJWluJSBhcy5jaGFyYWN0ZXIoZGF0YS5mcmFtZShxdWVzdGlvbl9rZXkgJT4lIGZpbHRlcihieWhhbmRfc3Vic2NhbGUgPT0gImludm9faGFyZHlfYmVudGFsbCIpICU+JSBkaXN0aW5jdChxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwpKSRxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwpLAogICAgICAgICAhZ3JlcGwoImF0dG4iLCBxdWVzdGlvbikpICU+JQogIGxlZnRfam9pbihxdWVzdGlvbl9rZXkgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsLCAKICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgIGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX3N1YnNjYWxlKSAlPiUKICAgICAgICAgICAgICByZW5hbWUocXVlc3Rpb24gPSBxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsCiAgICAgICAgICAgICAgICAgICAgIGNvZGluZyA9IGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgIHN1YnNjYWxlID0gYnloYW5kX3N1YnNjYWxlKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoY29kaW5nID0gZmFjdG9yKGNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIi0xIiwgIjEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIihSRVZFUlNFRCkiLCAiIikpLAogICAgICAgICBxdWVzdGlvbl90ZXh0X3Nob3J0ID0gZ3N1YignKC57MSwzMH0pKFxcc3wkKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXDFcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChxdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6ICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdHIocXVlc3Rpb25fdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDEsIHN0b3AgPSAxMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIuLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nKSkpICU+JQogIGNvdW50KGN0cnksIHBhY2tldCwgcXVlc3Rpb25fdGV4dF9zaG9ydCwgcmVzcG9uc2UpICU+JQogIGZpbHRlcihwYWNrZXQgIT0gIjEiKSAlPiUKICBzcHJlYWQocmVzcG9uc2UsIG4pICU+JQogIG11dGF0ZV9hdCh2YXJzKGAtMmA6YDJgKSwgCiAgICAgICAgICAgIGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUKICBhcnJhbmdlKGN0cnksIGAtMmApICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigib3JkZXIiKSAlPiUKICBtdXRhdGUob3JkZXIgPSBhcy5udW1lcmljKG9yZGVyKSwKICAgICAgICAgYWdyZWVfbiA9IGAxYCArIGAyYCwKICAgICAgICAgdG90YWxfbiA9IGAtMmAgKyBgLTFgICsgYDBgICsgYDFgICsgYDJgKSAlPiUKICBnYXRoZXIocmVzcG9uc2UsIG4sIGMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGZhY3RvcihyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiLTIiLCAiLTEiLCAiMCIsICIxIiwgIjIiKSksCiAgICAgICAgIGN0cnkgPSBmYWN0b3IoY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ1cyIsICJnaGFuYSIsICJ0aGFpbGFuZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaW5hIiwgInZhbnVhdHUiKSwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJVUyIsICJHaGFuYSIsICJUaGFpbGFuZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoaW5hIiwgIlZhbnVhdHUiKSkpICU+JQogIGRpc3RpbmN0KCkKCmFkanVzdCA8LSAxNQoKZ2dwbG90KGRfcGxvdCAlPiUKICAgICAgICAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU3Ryb25nbHkgZGlzYWdyZWUiLCAiRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmVpdGhlciBhZ3JlZSBub3IgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWdyZWUiLCAiU3Ryb25nbHkgYWdyZWUiKSksCiAgICAgICAgICAgICAgICBwYWNrZXQgPSBmYWN0b3IocGFja2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIjIiLCAiMyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlBhY2tldCAyIiwgIlBhY2tldCAzIikpKSwKICAgICAgIGFlcyh4ID0gcmVvcmRlcihxdWVzdGlvbl90ZXh0X3Nob3J0LCBkZXNjKHF1ZXN0aW9uX3RleHRfc2hvcnQpKSwKICAgICAgICAgICAjIHggPSByZW9yZGVyKHF1ZXN0aW9uX3RleHRfc2hvcnQsIGRlc2Mob3JkZXIpKSwKICAgICAgICAgICB5ID0gbiwgZmlsbCA9IHJlc3BvbnNlKSkgKwogIGZhY2V0X2dyaWQocGFja2V0IH4gY3RyeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2soKSwgc3RhdCA9ICJpZGVudGl0eSIsIAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKwogIGdlb21fdGV4dChkYXRhID0gZF9wbG90ICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KGN0cnksIHBhY2tldCwgcXVlc3Rpb25fdGV4dF9zaG9ydCwgb3JkZXIsIAogICAgICAgICAgICAgICAgICAgICAgIGFncmVlX24sIHRvdGFsX24pICU+JQogICAgICAgICAgICAgIG11dGF0ZShwYWNrZXQgPSBmYWN0b3IocGFja2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiMiIsICIzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJQYWNrZXQgMiIsICJQYWNrZXQgMyIpKSksCiAgICAgICAgICAgIGFlcyh5ID0gbWF4KGRfcGxvdCR0b3RhbF9uKSArIGFkanVzdCwgZmlsbCA9IE5VTEwsCiAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChhZ3JlZV9uL3RvdGFsX24sIDIpKjEwMCwgIiUiKSksIAogICAgICAgICAgICBzaXplID0gMywgaGp1c3QgPSAxKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgbWF4KGRfcGxvdCR0b3RhbF9uKSArIGFkanVzdCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlBSR24iKSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJSZXNwb25zZXMgdG8gJ0lubmVyIHNwZWVjaCcgKEhhcmR5L0JlbnRhbGwpIHNjYWxlIGl0ZW1zIiwKICAgICAgIHN1YnRpdGxlID0gIiUgY29ycmVzcG9uZHMgdG8gcmVzcG9uc2VzIG9mICdBZ3JlZScgb3IgJ1N0cm9uZ2x5IGFncmVlJyIsCiAgICAgICB4ID0gIiIsIHkgPSAiQ291bnQgb2YgcmVzcG9uc2VzIiwgZmlsbCA9ICJSZXNwb25zZSIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIiwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKwogICMgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSkKICBjb29yZF9mbGlwKCkKCnJtKGFkanVzdCkKYGBgCgpJIGhhdmUgbm90IHlldCBsb29rZWQgYXQgdGhpcyBpbiBkZXRhaWwuCgojIERpc3RyaWJ1dGlvbiBvZiByZXNwb25zZXMgZm9yIGluZGl2aWR1YWwgcGFydGljaXBhbnRzLCBieSBzaXRlCgpBbm90aGVyIHRoaW5nIHdlIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gaXMgaG93IGluZGl2aWR1YWwgcGFydGljaXBhbnRzIHJlc3BvbmRlZDogV2VyZSB0aGVyZSBwZW9wbGUgd2hvIHNhaWQgeWVzIHRvIGV2ZXJ5dGhpbmcsIG9yIG5vIHRvIGV2ZXJ5dGhpbmc/IEhvdyBkbyB0aGVzZSBkaXN0cmlidXRpb25zIG9mIHJlc3BvbnNlcyBkaWZmZXIgYWNyb3NzIHBhcnRpY2lwYW50cyBpbiBkaWZmZXJlbnQgc2l0ZXM/CgpMZXQncyB0YWtlIGEgbG9vazoKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMX0KZF9sb25nICU+JQogIGZpbHRlcihwYWNrZXQgPT0gMikgJT4lCiAgZmlsdGVyKHF1ZXN0aW9uICVpbiUgYXMuY2hhcmFjdGVyKGRhdGEuZnJhbWUocXVlc3Rpb25fa2V5ICU+JSBmaWx0ZXIoYnloYW5kX3N1YnNjYWxlID09ICJpbnZvX2hhcmR5X2JlbnRhbGwiKSAlPiUgZGlzdGluY3QocXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsKSkkcXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsKSwKICAgICAgICAgIWdyZXBsKCJhdHRuIiwgcXVlc3Rpb24pLAogICAgICAgICAhaXMubmEocmVzcG9uc2UpKSAlPiUKICBsZWZ0X2pvaW4ocXVlc3Rpb25fa2V5ICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KHF1ZXN0aW9uX2xhYmVsX3VuaXZlcnNhbCwgCiAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICBieWhhbmRfY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgIGJ5aGFuZF9zdWJzY2FsZSkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lKHF1ZXN0aW9uID0gcXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsLAogICAgICAgICAgICAgICAgICAgICBjb2RpbmcgPSBieWhhbmRfY29kaW5nLAogICAgICAgICAgICAgICAgICAgICBzdWJzY2FsZSA9IGJ5aGFuZF9zdWJzY2FsZSkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlKSwKICAgICAgICAgY29kaW5nID0gZmFjdG9yKGNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIi0xIiwgIjEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIihSRVZFUlNFRCkiLCAiIikpLAogICAgICAgICBxdWVzdGlvbl90ZXh0X3Nob3J0ID0gZ3N1YignKC57MSwxMzB9KShcXHN8JCknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFwxXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAoc3Vic3RyKHF1ZXN0aW9uX3RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAxLCBzdG9wID0gMTAwMDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiLi4uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZykpLAogICAgICAgICBzdWJzY2FsZSA9IGZhY3RvcihzdWJzY2FsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIklubmVyIHNwZWVjaCAoSGFyZHkvQmVudGFsbCkiKSkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgY291bnQoY3RyeSwgc3Vic2NhbGUsIHN1YmosIHJlc3BvbnNlKSAlPiUKICBzcHJlYWQocmVzcG9uc2UsIG4pICU+JQogIG11dGF0ZV9hdCh2YXJzKGMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpLCBmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lCiAgbXV0YXRlKHRvdGFsX24gPSBgLTJgICsgYC0xYCArIGAwYCArIGAxYCArIGAyYCwKICAgICAgICAgcHJvcF9uMiA9IGAtMmAvdG90YWxfbiwKICAgICAgICAgcHJvcF9uMSA9IGAtMWAvdG90YWxfbiwKICAgICAgICAgcHJvcF9uMCA9IGAwYC90b3RhbF9uLAogICAgICAgICBwcm9wX3AxID0gYDFgL3RvdGFsX24sCiAgICAgICAgIHByb3BfcDIgPSBgMmAvdG90YWxfbiwKICAgICAgICAgY3RyeSA9IGZhY3RvcihjdHJ5LAogICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoYW5hIiwgInRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbmEiLCAidmFudWF0dSIpLAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlVTIiwgIkdoYW5hIiwgIlRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hpbmEiLCAiVmFudWF0dSIpKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBzZWxlY3QoLWMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpICU+JQogIGdhdGhlcihyZXNwb25zZSwgcHJvcCwgc3RhcnRzX3dpdGgoInByb3AiKSkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJwcm9wX24yIiwgInByb3BfbjEiLCAicHJvcF9uMCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9wX3AxIiwgInByb3BfcDIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU3Ryb25nbHkgZGlzYWdyZWUiLCAiRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOZWl0aGVyIGFncmVlIG5vciBkaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFncmVlIiwgIlN0cm9uZ2x5IGFncmVlIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwcm9wLCBmaWxsID0gY3RyeSkpICsKICBmYWNldF9ncmlkKHJlc3BvbnNlIH4gY3RyeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMS8xMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4yNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEwMCwgMTApKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZV9idygpICsKICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbnMgb2YgaG93IG1hbnkgdGltZXMgcGFydGljaXBhbnRzIGVuZG9yc2VkIGVhY2ggcmVzcG9uc2Ugb3B0aW9uIGZvciB0aGUgJ0lubmVyIHNwZWVjaCcgKEhhcmR5L0JlbnRhbGwpIHNjYWxlIGl0ZW1zIChQYWNrZXQgMikiLAogICAgICAgeCA9ICJQcm9wb3J0aW9uIG9mIHJlc3BvbnNlcyAoYXQgdGhlIGluZGl2aWR1YWwgcGFydGljaXBhbnQgbGV2ZWwpIiwgeSA9ICJDb3VudCBvZiBwYXJ0aWNpcGFudHMiLCBmaWxsID0gIlNpdGUiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMX0KZF9sb25nICU+JQogIGZpbHRlcihwYWNrZXQgPT0gMykgJT4lCiAgZmlsdGVyKHF1ZXN0aW9uICVpbiUgYXMuY2hhcmFjdGVyKGRhdGEuZnJhbWUocXVlc3Rpb25fa2V5ICU+JSBmaWx0ZXIoYnloYW5kX3N1YnNjYWxlID09ICJpbnZvX2hhcmR5X2JlbnRhbGwiKSAlPiUgZGlzdGluY3QocXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsKSkkcXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsKSwKICAgICAgICAgIWdyZXBsKCJhdHRuIiwgcXVlc3Rpb24pLAogICAgICAgICAhaXMubmEocmVzcG9uc2UpKSAlPiUKICBsZWZ0X2pvaW4ocXVlc3Rpb25fa2V5ICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KHF1ZXN0aW9uX2xhYmVsX3VuaXZlcnNhbCwgCiAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICBieWhhbmRfY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgIGJ5aGFuZF9zdWJzY2FsZSkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lKHF1ZXN0aW9uID0gcXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsLAogICAgICAgICAgICAgICAgICAgICBjb2RpbmcgPSBieWhhbmRfY29kaW5nLAogICAgICAgICAgICAgICAgICAgICBzdWJzY2FsZSA9IGJ5aGFuZF9zdWJzY2FsZSkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlKSwKICAgICAgICAgY29kaW5nID0gZmFjdG9yKGNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIi0xIiwgIjEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIihSRVZFUlNFRCkiLCAiIikpLAogICAgICAgICBxdWVzdGlvbl90ZXh0X3Nob3J0ID0gZ3N1YignKC57MSwxMzB9KShcXHN8JCknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFwxXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAoc3Vic3RyKHF1ZXN0aW9uX3RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAxLCBzdG9wID0gMTAwMDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiLi4uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZykpLAogICAgICAgICBzdWJzY2FsZSA9IGZhY3RvcihzdWJzY2FsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIklubmVyIHNwZWVjaCAoSGFyZHkvQmVudGFsbCkiKSkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgY291bnQoY3RyeSwgc3Vic2NhbGUsIHN1YmosIHJlc3BvbnNlKSAlPiUKICBzcHJlYWQocmVzcG9uc2UsIG4pICU+JQogIG11dGF0ZV9hdCh2YXJzKGMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpLCBmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lCiAgbXV0YXRlKHRvdGFsX24gPSBgLTJgICsgYC0xYCArIGAwYCArIGAxYCArIGAyYCwKICAgICAgICAgcHJvcF9uMiA9IGAtMmAvdG90YWxfbiwKICAgICAgICAgcHJvcF9uMSA9IGAtMWAvdG90YWxfbiwKICAgICAgICAgcHJvcF9uMCA9IGAwYC90b3RhbF9uLAogICAgICAgICBwcm9wX3AxID0gYDFgL3RvdGFsX24sCiAgICAgICAgIHByb3BfcDIgPSBgMmAvdG90YWxfbiwKICAgICAgICAgY3RyeSA9IGZhY3RvcihjdHJ5LAogICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoYW5hIiwgInRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbmEiLCAidmFudWF0dSIpLAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlVTIiwgIkdoYW5hIiwgIlRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hpbmEiLCAiVmFudWF0dSIpKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBzZWxlY3QoLWMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpICU+JQogIGdhdGhlcihyZXNwb25zZSwgcHJvcCwgc3RhcnRzX3dpdGgoInByb3AiKSkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJwcm9wX24yIiwgInByb3BfbjEiLCAicHJvcF9uMCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9wX3AxIiwgInByb3BfcDIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU3Ryb25nbHkgZGlzYWdyZWUiLCAiRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOZWl0aGVyIGFncmVlIG5vciBkaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFncmVlIiwgIlN0cm9uZ2x5IGFncmVlIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwcm9wLCBmaWxsID0gY3RyeSkpICsKICBmYWNldF9ncmlkKHJlc3BvbnNlIH4gY3RyeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMS8xMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4yNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEwMCwgMTApKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZV9idygpICsKICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbnMgb2YgaG93IG1hbnkgdGltZXMgcGFydGljaXBhbnRzIGVuZG9yc2VkIGVhY2ggcmVzcG9uc2Ugb3B0aW9uIGZvciB0aGUgJ0lubmVyIHNwZWVjaCcgKEhhcmR5L0JlbnRhbGwpIHNjYWxlIGl0ZW1zIChQYWNrZXQgMykiLAogICAgICAgeCA9ICJQcm9wb3J0aW9uIG9mIHJlc3BvbnNlcyAoYXQgdGhlIGluZGl2aWR1YWwgcGFydGljaXBhbnQgbGV2ZWwpIiwgeSA9ICJDb3VudCBvZiBwYXJ0aWNpcGFudHMiLCBmaWxsID0gIlNpdGUiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpgYGAKCkkgaGF2ZSBub3QgeWV0IGxvb2tlZCBhdCB0aGlzIGluIGRldGFpbC4KCkp1c3QgZm9yIGZ1biwgaGVyZSdzIGFub3RoZXIgd2F5IHRvIGxvb2sgYXQgdGhlIHNhbWUgZGF0YSwgb3ZlcmxheWluZyB0aGUgZGVuc2l0eSBkaXN0cmlidXRpb25zIGZvciBlYWNoIHNpdGUgb24gdG9wIG9mIGVhY2ggb3RoZXIgdG8gc2VlIHdoZXJlIHRoZXkgc2VlbSB0byBiZSBzaW1pbGFyL2RpZmZlcmVudDoKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gM30KZF9sb25nICU+JQogIGZpbHRlcihwYWNrZXQgPT0gMikgJT4lCiAgZmlsdGVyKHF1ZXN0aW9uICVpbiUgYXMuY2hhcmFjdGVyKGRhdGEuZnJhbWUocXVlc3Rpb25fa2V5ICU+JSBmaWx0ZXIoYnloYW5kX3N1YnNjYWxlID09ICJpbnZvX2hhcmR5X2JlbnRhbGwiKSAlPiUgZGlzdGluY3QocXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsKSkkcXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsKSwKICAgICAgICAgIWdyZXBsKCJhdHRuIiwgcXVlc3Rpb24pLAogICAgICAgICAhaXMubmEocmVzcG9uc2UpKSAlPiUKICBsZWZ0X2pvaW4ocXVlc3Rpb25fa2V5ICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KHF1ZXN0aW9uX2xhYmVsX3VuaXZlcnNhbCwgCiAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICBieWhhbmRfY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgIGJ5aGFuZF9zdWJzY2FsZSkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lKHF1ZXN0aW9uID0gcXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsLAogICAgICAgICAgICAgICAgICAgICBjb2RpbmcgPSBieWhhbmRfY29kaW5nLAogICAgICAgICAgICAgICAgICAgICBzdWJzY2FsZSA9IGJ5aGFuZF9zdWJzY2FsZSkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgbXV0YXRlKGNvZGluZyA9IGZhY3Rvcihjb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCItMSIsICIxIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIoUkVWRVJTRUQpIiwgIiIpKSwKICAgICAgICAgcXVlc3Rpb25fdGV4dF9zaG9ydCA9IGdzdWIoJyguezEsMTMwfSkoXFxzfCQpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcMVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKHN1YnN0cihxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gMSwgc3RvcCA9IDEwMDAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIi4uLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RpbmcpKSwKICAgICAgICAgc3Vic2NhbGUgPSBmYWN0b3Ioc3Vic2NhbGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJJbm5lciBzcGVlY2ggKEhhcmR5L0JlbnRhbGwpIikpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGNvdW50KGN0cnksIHN1YnNjYWxlLCBzdWJqLCByZXNwb25zZSkgJT4lCiAgc3ByZWFkKHJlc3BvbnNlLCBuKSAlPiUKICBtdXRhdGVfYXQodmFycyhjKGAtMmAsIGAtMWAsIGAwYCwgYDFgLCBgMmApKSwgZnVucyhyZXBsYWNlKC4sIGlzLm5hKC4pLCAwKSkpICU+JQogIG11dGF0ZSh0b3RhbF9uID0gYC0yYCArIGAtMWAgKyBgMGAgKyBgMWAgKyBgMmAsCiAgICAgICAgIHByb3BfbjIgPSBgLTJgL3RvdGFsX24sCiAgICAgICAgIHByb3BfbjEgPSBgLTFgL3RvdGFsX24sCiAgICAgICAgIHByb3BfbjAgPSBgMGAvdG90YWxfbiwKICAgICAgICAgcHJvcF9wMSA9IGAxYC90b3RhbF9uLAogICAgICAgICBwcm9wX3AyID0gYDJgL3RvdGFsX24sCiAgICAgICAgIGN0cnkgPSBmYWN0b3IoY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ1cyIsICJnaGFuYSIsICJ0aGFpbGFuZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaW5hIiwgInZhbnVhdHUiKSwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJVUyIsICJHaGFuYSIsICJUaGFpbGFuZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoaW5hIiwgIlZhbnVhdHUiKSkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgc2VsZWN0KC1jKGAtMmAsIGAtMWAsIGAwYCwgYDFgLCBgMmApKSAlPiUKICBnYXRoZXIocmVzcG9uc2UsIHByb3AsIHN0YXJ0c193aXRoKCJwcm9wIikpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGZhY3RvcihyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygicHJvcF9uMiIsICJwcm9wX24xIiwgInByb3BfbjAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvcF9wMSIsICJwcm9wX3AyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlN0cm9uZ2x5IGRpc2FncmVlIiwgIkRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmVpdGhlciBhZ3JlZSBub3IgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZ3JlZSIsICJTdHJvbmdseSBhZ3JlZSIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcHJvcCwgZmlsbCA9IGN0cnkpKSArCiAgZmFjZXRfZ3JpZChyZXNwb25zZSB+IC4sIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZml4ZWQiKSArCiAgZ2VvbV9kZW5zaXR5KGFscGhhID0gMC4zKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMSksIGJyZWFrcyA9IHNlcSgwLCAxLCAwLjI1KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJEaXN0cmlidXRpb25zIG9mIGhvdyBtYW55IHRpbWVzIHBhcnRpY2lwYW50cyBlbmRvcnNlZCBlYWNoXG5yZXNwb25zZSBvcHRpb24gZm9yIHRoZSAnSW5uZXIgc3BlZWNoJyAoSGFyZHkvQmVudGFsbCkgc2NhbGUgaXRlbXNcbihQYWNrZXQgMikiLAogICAgICAgeCA9ICJQcm9wb3J0aW9uIG9mIHJlc3BvbnNlcyAoYXQgdGhlIGluZGl2aWR1YWwgcGFydGljaXBhbnQgbGV2ZWwpIiwgeSA9ICJDb3VudCBvZiBwYXJ0aWNpcGFudHMiLCBmaWxsID0gIlNpdGUiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIsCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAzfQpkX2xvbmcgJT4lCiAgZmlsdGVyKHBhY2tldCA9PSAzKSAlPiUKICBmaWx0ZXIocXVlc3Rpb24gJWluJSBhcy5jaGFyYWN0ZXIoZGF0YS5mcmFtZShxdWVzdGlvbl9rZXkgJT4lIGZpbHRlcihieWhhbmRfc3Vic2NhbGUgPT0gImludm9faGFyZHlfYmVudGFsbCIpICU+JSBkaXN0aW5jdChxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwpKSRxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwpLAogICAgICAgICAhZ3JlcGwoImF0dG4iLCBxdWVzdGlvbiksCiAgICAgICAgICFpcy5uYShyZXNwb25zZSkpICU+JQogIGxlZnRfam9pbihxdWVzdGlvbl9rZXkgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsLCAKICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgIGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX3N1YnNjYWxlKSAlPiUKICAgICAgICAgICAgICByZW5hbWUocXVlc3Rpb24gPSBxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsCiAgICAgICAgICAgICAgICAgICAgIGNvZGluZyA9IGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgIHN1YnNjYWxlID0gYnloYW5kX3N1YnNjYWxlKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoY29kaW5nID0gZmFjdG9yKGNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIi0xIiwgIjEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIihSRVZFUlNFRCkiLCAiIikpLAogICAgICAgICBxdWVzdGlvbl90ZXh0X3Nob3J0ID0gZ3N1YignKC57MSwxMzB9KShcXHN8JCknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFwxXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAoc3Vic3RyKHF1ZXN0aW9uX3RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAxLCBzdG9wID0gMTAwMDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiLi4uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZykpLAogICAgICAgICBzdWJzY2FsZSA9IGZhY3RvcihzdWJzY2FsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIklubmVyIHNwZWVjaCAoSGFyZHkvQmVudGFsbCkiKSkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgY291bnQoY3RyeSwgc3Vic2NhbGUsIHN1YmosIHJlc3BvbnNlKSAlPiUKICBzcHJlYWQocmVzcG9uc2UsIG4pICU+JQogIG11dGF0ZV9hdCh2YXJzKGMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpLCBmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lCiAgbXV0YXRlKHRvdGFsX24gPSBgLTJgICsgYC0xYCArIGAwYCArIGAxYCArIGAyYCwKICAgICAgICAgcHJvcF9uMiA9IGAtMmAvdG90YWxfbiwKICAgICAgICAgcHJvcF9uMSA9IGAtMWAvdG90YWxfbiwKICAgICAgICAgcHJvcF9uMCA9IGAwYC90b3RhbF9uLAogICAgICAgICBwcm9wX3AxID0gYDFgL3RvdGFsX24sCiAgICAgICAgIHByb3BfcDIgPSBgMmAvdG90YWxfbiwKICAgICAgICAgY3RyeSA9IGZhY3RvcihjdHJ5LAogICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoYW5hIiwgInRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbmEiLCAidmFudWF0dSIpLAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlVTIiwgIkdoYW5hIiwgIlRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hpbmEiLCAiVmFudWF0dSIpKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBzZWxlY3QoLWMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpICU+JQogIGdhdGhlcihyZXNwb25zZSwgcHJvcCwgc3RhcnRzX3dpdGgoInByb3AiKSkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJwcm9wX24yIiwgInByb3BfbjEiLCAicHJvcF9uMCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9wX3AxIiwgInByb3BfcDIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU3Ryb25nbHkgZGlzYWdyZWUiLCAiRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOZWl0aGVyIGFncmVlIG5vciBkaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFncmVlIiwgIlN0cm9uZ2x5IGFncmVlIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwcm9wLCBmaWxsID0gY3RyeSkpICsKICBmYWNldF9ncmlkKHJlc3BvbnNlIH4gLiwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmaXhlZCIpICsKICBnZW9tX2RlbnNpdHkoYWxwaGEgPSAwLjMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxKSwgYnJlYWtzID0gc2VxKDAsIDEsIDAuMjUpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZV9idygpICsKICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbnMgb2YgaG93IG1hbnkgdGltZXMgcGFydGljaXBhbnRzIGVuZG9yc2VkIGVhY2hcbnJlc3BvbnNlIG9wdGlvbiBmb3IgdGhlICdJbm5lciBzcGVlY2gnIChIYXJkeS9CZW50YWxsKSBzY2FsZSBpdGVtc1xuKFBhY2tldCAzKSIsCiAgICAgICB4ID0gIlByb3BvcnRpb24gb2YgcmVzcG9uc2VzIChhdCB0aGUgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudCBsZXZlbCkiLCB5ID0gIkNvdW50IG9mIHBhcnRpY2lwYW50cyIsIGZpbGwgPSAiU2l0ZSIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIiwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKYGBgCg==